package com.ctshk.rpc.order.goods.service;

import com.alibaba.fastjson.JSONObject;
import com.ctshk.common.dto.Result;
import com.ctshk.rpc.order.goods.dto.CurrentUsreCartInfoDTO;
import com.ctshk.rpc.order.goods.req.OrderConsigneeInfoReq;
import com.ctshk.rpc.order.goods.req.ShoppingCartAddReq;

import java.util.List;

/**
 * <p>
 * 购物车 服务类
 * </p>
 *
 * @author 姜斌文
 * @since 2021-04-19
 */
public interface IShoppingCartService {
    /**
     * 添加商品到購物車
     * @param addReq 購物車入參對象
     * @param userId 用户ID
     */
    void addShoppingCart(ShoppingCartAddReq addReq, Long userId);

    /**
     * Pc端添加商品到購物車
     * @param addReq 購物車入參對象
     * @param userId 用户ID
     */
    void addPcShoppingCart(ShoppingCartAddReq addReq, Long userId);

    /**
     * 根據主鍵ID刪除購物車數據
     * @param ids 購物車主鍵ID集合
     * @param userId 用户ID
     */
    void delAppShoppingCart(List<Long> ids, Long userId);

    /**
     * 根據購物車主鍵ID，更新商品數量
     * @param req 入參
     * @param userId 用户ID
     */
    void updateShoppingCartNumber(JSONObject req, Long userId);

    /**
     * 頁面加載時，加載當前用戶購物車商品信息
     * @param userId 當前登入用戶ID
     * @return 加載當前用戶購物車商品信息集合
     */
    List<CurrentUsreCartInfoDTO> findCurrentUsreCartInfoList(Long userId);

    /**
     * Pc端頁面加載時，加載當前用戶購物車商品信息
     * @param userId 當前登入用戶ID
     * @return 加載當前用戶購物車商品信息集合
     */
    List<CurrentUsreCartInfoDTO> findPcCurrentUsreCartInfoList(Long userId,Integer code);

    /**
     * 未登录状态获取购物车信息
     * @param code
     * @param from
     * @param size
     * @return
     */
    Result findUserShoppingCarInfoByLogout(String code,Integer from,Integer size);

    /**
     * 未登录状态生成购物车订单
     * @param orderCommodityListReq
     * @return
     */
    void addShoppingCartByLogout(ShoppingCartAddReq addReq);

    /**
     * 修改收货地址
     * @param orderConsigneeInfoReq
     * @return
     */
    Result upAddress(OrderConsigneeInfoReq orderConsigneeInfoReq);

    /**
     *  根据购物车id,更新商品数量(未登录)
     * @param req
     * @param id
     */
    void updateShoppingCartNumberByLogout(JSONObject req);

    /**
     * 删除购物车商品 -- 未登录
      * @param ids
     */
    void delShoppingCartByLogout(JSONObject req);
}
